#pragma once
#include<spdlog/spdlog.h>
#include<spdlog/sinks/stdout_color_sinks.h>
#include<spdlog/sinks/basic_file_sink.h>
#include<spdlog/async.h>
#include<string>
#include<iostream>

//mode：运行模式  true：发布者模式  false：调试模式

std::shared_ptr<spdlog::logger> g_default_logger;//封装了一个同步日志类
void init_logger(bool mode,const std::string&file,int32_t level){
    if(mode==false){
        //调试模式，直接输出到标准输出,日志等级为最低
        g_default_logger=spdlog::stdout_color_mt("default_logger");
        g_default_logger->set_level(spdlog::level::level_enum::trace);
        g_default_logger->flush_on(spdlog::level::level_enum::trace);  
    }else{
        //发布者模式，日志输出到文件，日志等级自定义
        g_default_logger=spdlog::basic_logger_mt("default_logger",file);
        g_default_logger->set_level((spdlog::level::level_enum)level);
        g_default_logger->flush_on((spdlog::level::level_enum)level); 
    }
    //设置日志输出格式
    g_default_logger->set_pattern("%H:%M:%S [%t] [%-8l] %v");
}

#define LOG_TRACE(format,...) g_default_logger->trace(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_DEBUG(format,...) g_default_logger->debug(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_INFO(format,...) g_default_logger-info(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_WARN(format,...) g_default_logger->warn(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_ERROR(format,...) g_default_logger->error(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
#define LOG_CRITICAL(format,...) g_default_logger->critical(std::string("[{}:{}] ")+format,__FILE__,__LINE__,##__VA_ARGS__);
